#include <iostream>
#include <iomanip>
#include <vector>
#include <string>
#include <cmath>

using namespace std;

typedef long long ll;

ll P = 1000000000;
const ll undef = -1;

string s;

const int N = 310;
ll dp[N][N];

void init() {
	for(int i = 0; i < N; i++) for(int j = 0; j < N; j++) dp[i][j] = undef;
}

inline ll DP(int i, int j) {
	if(dp[i][j] != undef) return dp[i][j];
	if(s[i] != s[j]) return 0LL;
	if(i == j) return 1LL;

	dp[i][j] = DP(i + 1, j - 1);

	for(int k = i + 1; k < j; k++) {
		if(s[k] == s[i] && s[i+1] == s[k-1]) {
			dp[i][j] += (DP(i+1, k-1) * DP(k, j)) % P;
			dp[i][j] %= P;
		}
	}

	return dp[i][j];
}

int main() {
	init();
	ios_base::sync_with_stdio(false);
	cin >>s;
	cout <<DP(0, s.size() - 1) <<endl;
	return 0;
}